<p>A Single Abstract Method (SAM) interface is a Java interface containing only one method. The Java API is full of SAM interfaces, such as
<code>java.lang.Runnable</code>, <code>java.awt.event.ActionListener</code>, <code>java.util.Comparator</code> and
<code>java.util.concurrent.Callable</code>. SAM interfaces have a special place in Java 8 because they can be implemented using Lambda expressions or
Method references. </p>
<p>Using <code>@FunctionalInterface</code> forces a compile break when an additional, non-overriding abstract method is added to a SAM, which would
break the use of Lambda implementations.</p>
<p><strong>Note</strong> that this rule is automatically disabled when the project's <code>sonar.java.source</code> is lower than <code>8</code>.</p>
<h2>Noncompliant Code Example</h2>
<pre>
public interface Changeable&lt;T&gt; {
  public void change(T o);
}
</pre>
<h2>Compliant Solution</h2>
<pre>
@FunctionalInterface
public interface Changeable&lt;T&gt; {
  public void change(T o);
}
</pre>
<h2>Deprecated</h2>
<p>This rule is deprecated, and will eventually be removed.</p>

